home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / DOC / SHELWRIT.TXT < prev    next >
Encoding:
Text File  |  1991-03-27  |  3.6 KB  |  70 lines

  1. shel_write erfüllt ZWEI Zwecke:
  2.  
  3. 1. Man teilt damit einem daraufhin irgendwie gestarteten Programm
  4.   seinen Namen/Pfad sowie die Argumentzeile mit. Das gestartete
  5.   GEM-Programm erfährt diese Daten durch Aufruf von shel_read().
  6.  
  7. 2. Ein Programm kann ein "Chaining" durchführen. D.h, es kann
  8.   erreichen, daß es selbst terminiert und daraufhin ein anderes
  9.   Programm starten läßt.
  10.   Demgegenüber kann ein Programm über "Pexec()" auch jederzeit
  11.   ein anderes Programm als "Unterroutine" starten.
  12.   Während beim Chaining dem nachgestarteten Programm wieder aller
  13.   Speicher zur Verfügung steht, ist beim "Unterprogrammaufruf"
  14.   der Speicher knapper, weil ja das startende Prg im Speicher verbleibt.
  15.  
  16.   Signum startet beispielsweise den Druckertreiber über diesen
  17.   Chaining-Mechanismus: Dazu ruft Signum "shel_write()" mit dem
  18.   Namen des Druckprogramms als Prgnamen und des bearbeiteten Textes
  19.   als Arg-Zeile auf und terminiert daraufhin. Wurde Signum vom
  20.   Desktop aus gestartet, erkennt dieser nun, daß Signum shel_write()
  21.   gerufen hatte und startet nun automatisch das gewünschte Programm.
  22.   Will das Druckprogramm wieder die Kontrolle zurück an Signum geben,
  23.   muß es dies wiederum auf die selbe Weise über shel_write tun.
  24.  
  25.   Wird Signum aber beispielsweise von einer anderen Shell aus
  26.   gestartet, muß diese die Funktion des Desktops übernehmen, d.h,
  27.   erkennen, daß das vorige Programm "shel_write" rief und entsprechend
  28.   reagieren (Pexec() aufrufen). Das Problem dabei ist aber, daß
  29.   dazu leider eine Information fehlt: Wird shel_write gerufen, werden
  30.   nicht nur Progname und Argzeile gemerkt, sondern auch ein Flag
  31.   gesetzt, daß den Aufruf anzeigt (seit TOS 1.4 kann dieses Flag
  32.   übrigens auch wieder gelöscht werden). Der Desktop prüft dieses
  33.   Flag, um zu erkennen, daß ein shel_write-Aufruf erfolgt war.
  34.   Dann setzt es das Flag zrück und startet das gewünschte Programm.
  35.   Eine andere Shell kann aber dieses Flag nicht abfragen. Stattdessen
  36.   muß es ein anderes Verfahren anwenden: Es geht davon aus, daß
  37.   ein Programm niemals sich selbst per Chaining nachstarten wird
  38.   (ist ja wohl sinnlos). Also prüft es nach der Rückkehr eines
  39.   gestarteten Programms mit shel_read(), ob noch der selbe PrgName
  40.   wie vor dem Start bestimmt ist. In diesem Fall hat das Prg
  41.   offenbar keinen shel_write-Aufruf durchgeführt.
  42.  
  43.   Nur wenige Shells tun auch dieses "Chaining" berücksichtigen, so
  44.   z.B. GEMINI. Neodesk versucht das auch, aber mit einem ganz
  45.   anderen Verfahren (es hängt sich in den AES-TRAP-Vektor und
  46.   setzt sich selbst ein Flag, wenn shel_write gerufen wird) und
  47.   dies geht dann auch bei einigen Dingen in die Hose, so z.B.
  48.   bei der Megamax-Shell, die die seit TOS 1.4 verfügbare Möglichkeit
  49.   des Rücksetzen des internen Flag benutzt, Neodesk das aber noch
  50.   nicht berücksichtigt.
  51.  
  52.   Ach ja, daraus folgt auch: Wenn ein Programm/Shell ein anderes mit
  53.   Pexec als Unterprg. startet, und es vorher ordnungsgemäß Prgname/Argzeile
  54.   per shel_write mitteilt, muß es hinterher nicht nur das Flag
  55.   zurücksetzen, damit der Desktop das Programm bei Ende des Shell
  56.   nicht nochmal startet, sondern man muß auch den eigenen Namen
  57.   wieder einsetzen, damit Programme wie GEMINI nicht das Prg nochmal
  58.   starten.
  59.  
  60.   Und dann gibt's da ja noch die anderen Problemchen, z.B. das Schließen
  61.   der eventuell offenen ACC-Fenster. Ganz schön aufwendig, das Ganze, nicht?
  62.   Wer mehr wissen will, soll sich das MM2 zulegen - das kann er im
  63.   mitgelieferten Source der Shell alles abgucken :-)
  64.  
  65. Claus, ist damit Deine Frage beantwortet?
  66.  
  67. Wird wohl mal wieder Zeit für einen Artikel, wie?
  68.  
  69. TT
  70.